home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 4
/
Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso
/
Pearls
/
dev
/
Monitor
/
Snoopy
/
Support
/
tasklist.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-21
|
2KB
|
110 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <proto/exec.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <exec/execbase.h>
char *ver="\0$VER: tasklist Snoopy Support Tool 1.1 (01.01.94)";
extern struct ExecBase *SysBase;
#define TYPE_TASK 0
#define TYPE_PROCESS 1
#define IS_CURRENT 0
#define IS_READY 1
#define IS_WAITING 2
char *GetTaskName( struct Task *t, int *type )
{
if( t->tc_Node.ln_Type == NT_PROCESS )
{
struct Process *p = (struct Process *)t;
struct CommandLineInterface *cli;
static char buffer[256];
char *cp,*dp;
int i;
if( p->pr_TaskNum == 0 )
return t->tc_Node.ln_Name;
cli = BADDR( p->pr_CLI );
cp = BADDR( cli->cli_CommandName );
dp = buffer;
for( i=*cp++; i; i-- )
{
*dp++ = *cp++;
}
*dp=0;
*type = TYPE_PROCESS;
return buffer;
}
*type = TYPE_TASK;
return t->tc_Node.ln_Name;
}
struct ti
{
struct ti *next;
char *message;
int type,mode;
void *addr;
};
struct ti *anchor = NULL;
void AddTaskInfo( struct Task *t, int mode )
{
struct ti *n;
if( ( n = (struct ti *)calloc( 1, sizeof( struct ti ) ) ) != NULL )
{
n->next = anchor;
anchor = n;
n->mode = mode;
n->message = strdup( GetTaskName( t, &(n->type) ) );
n->addr = t;
}
}
char *types[] =
{
"TASK ",
"PROCESS "
};
char *modes[] =
{
"CURRENT ",
"READY ",
"WAITING "
};
void main( void )
{
struct Node *np;
struct ti *ptr;
Forbid();
AddTaskInfo( SysBase->ThisTask, IS_CURRENT );
for( np = SysBase->TaskReady.lh_Head;
np != (struct Node *)&(SysBase->TaskReady.lh_Tail);
np = np->ln_Succ )
{
AddTaskInfo( (struct Task *)np, IS_READY );
}
for( np = SysBase->TaskWait.lh_Head;
np != (struct Node *)&(SysBase->TaskWait.lh_Tail);
np = np->ln_Succ )
{
AddTaskInfo( (struct Task *)np, IS_WAITING );
}
Permit();
for( ptr=anchor; ptr != NULL; ptr = ptr->next )
printf( "%08lx %s%s\"%s\"\n", ptr->addr, modes[ptr->mode], types[ptr->type], ptr->message );
}